home *** CD-ROM | disk | FTP | other *** search
- En el VCL viene una referencia a un articulo sobre
- antidebug, si no es el mismo te agradecería que, si lo
- consigues, lo pongas por aquí.
-
- Como veo que buscais técnicas anti-debugger, yo tengo algunos, he aquí un
- resumen de algunas técnicas y metodos para evitarlas. :-))
-
- ===8<==========================================
- 1. Preventive actions:
- ----------------------
- 1.1. Interrupt disable:
- 1.1.1. Hardware masking of interrupt:
-
- Deshabiltar la IRQ1 del teclado (port 21:=port 21 or 2)
-
- POR QUÉ NO: inútil contra Soft-ICE.
-
- 1.1.2. Software masking of interrupt:
-
- Poner vectores de interrupción que no usas a cero (ej,
- int 3 y demás).
-
- 1.1.3. Vector manipulation
-
- Usar los vectores int 01 e int 03 para datos del programa (ej,
- para una rutina de desencriptación).
-
- 1.1.4. Interrupt replacement
-
- Copiar vectores de interrupción que usas (ej, int 16 ó int 21) a
- los vectores int 01 e int 03 y usar éstos en lugar de aquellos.
-
- (además el que int 03 sea un código de un sólo byte, "cc", hace
- que sea difícil sustituirlo por la int xx original, de dos bytes
- "cd xx").
-
- POR QUÉ NO: A los depuradores V86 no les afecta.
-
- 1.2. Time watch:
-
- Poner un bucle que espera a que cambie el contador de tiempo del
- DOS, "util contra programas como el TD que deshabilitan todas las
- interrupciones salvo cuando se está ejecutando el programa"
- "Sirve contra RUN, no TRACE". (mi no comprender :-? :-?)
-
- POR QUÉ NO: Cuando se "cuelga" en el bucle, interrumpes, ves lo que pasa,
- y machacas el bucle con NOPs.
-
- 1.3. Fool the debugger:
-
- Saltar dentro del código de una instrucción que a su vez contiene
- la instrucción que quieres ejecutar:
-
- 104: eb 02 jmp 108
- 106: c6 06 e6 21 00 mov byte ptr [21e6],90
- ( 108: e6 21 90 out 21, al / nop )
-
- POR QUÉ NO: le dices que te desensamble a partir de cs:ip.
-
- 1.4. Check CPU Flags:
-
- "Bueno contra depuradores en modo real."
- Pones la TF (bit ocho de flags) a 0 en un punto del programa y
- luego la compruebas en otro punto. Si está a 1 estás bajo un
- depurador.
-
- POR QUÉ NO: inútil en V86
-
- 1.5. Cause debugger to stop execution:
-
- Espolvorear int 3 en el código, sobre todo dentro de bucles.
-
- POR QUÉ NO: Es fácil pisar la int 03 con un NOP. A muchos depuradores
- se les puede indicar que no paren ante una int 03.
-
- 1.6. Halt computer using stack:
-
- Apuntar ss:sp a un trozo de código que no utiliza la pila.
- Si se depurando, el depurador que no utilice su propia pila
- machacará el código.
-
- POR QUÉ NO: Los depuradores sí utilizan su propia pila.
-
- 1.7. Halt TD386 V8086 mode:
-
- TD386 no usa int 0 para la división por cero. TD386 detecta un
- fallo de división y aborta el programa, mientras que sin TD386
- basta con apuntar la int 0 a la instrucción siguiente a la
- división por cero para recuperar el control.
-
- POR QUÉ NO: No es verdad. Eso no le hace nada al TD386.
-
- 1.8. Halt any V8086 process:
-
- Apuntar el vector int 0d al código y causar una excepción de
- protección. El programa funcionará en modo real, pero no en
- V8086.
-
- POR QUÉ NO: Es muy fácil cambiar el código ilegal y además te cargas la
- compatibilidad con muchos sistemas.
-
- 2. Self-modifying code:
- -----------------------
-
- 2.1. Encryptive/decryptive algorithm:
-
- Desencriptas un código antes de ejecutarlo. Si el depurador ha
- metido un byte int 03 al desencriptarlo se cambiará por basura.
-
- 100 mov bx, 0971
- 103 mov di, 0110
- 106 xchg ax,cx
- 107 xchg ax,cx
- 108 xor byte ptr [cs:di],97
- 10c inc di
- 10d dec bx
- 10e jnz 106
- 110 07 pop es ; cambiará a 90 NOP
- 111 pop es
-
-
- 2.2. Self-modifying code:
- 2.2.1. Simple self-modification:
-
- Modificar el código que vas a ejecutar para borrar los int 03 que
- ponga el depurador:
-
- 100 call 0107 ; queremos saltarnos esta subrutina
- 103 cd 20 int 20 ; aquí el depurador pone int 3
- 105 int 21
- 107 mov [word ptr 103],4cb4 ; "mov ah,4c"
- 10d ret
-
- POR QUÉ NO: Depuradores V86 te dejan usar breakpoints hardware, sin
- utilizar int 03. (Tanto para 2.1 como para 2.2.1)
-
-
- 2.2.2. The Running Line (self-decrypting):
-
- < Este lo puse antes :-) >
-
-
- Créditos:
-
- ANTIDEPURADOR:
- Anti Debugging Tricks
- By:
- Inbar Raz
- Assistance by Eden Shochat and Yossi Gottlieb
- Release number 5
-
- - - - -
- ANTIANTIDEPURADOR ("POR QUÉ NO"):
-
- Sun 24 Jan 93
- By: Michael Forrest
- Hi. Here's release 1 of the Anti-Anti Debugging Tricks article.
-